typeof null为什么等于object
这是一个历史遗留问题,是一个不能修改的错误。在JavaScript的第一个版本实现中 用32位存储一个值 ,包括一个3位的用于表示类型的标识和实际的值。类型标记存储在低位上,一共有5种:
000:对象1:整数010:浮点数100:字符串110:布尔
也就是说,最低位如果是1,那么类型标记只有1位长;如果是0,那么类型标记有3位长,为4种类型提供两个额外的位。有两个值是特殊的:
undefined(JSVAL_VOID)是整数−230 = 1073741824(整数范围之外的数字)。null(JSVAL_NULL)是机器码空指针。或者:一个对象类型标签加上一个零的引用(0000)。
现在我们很清楚为什么typeof为什么会认为null是一个对象了,它检查了null的类型标记,类型标记说object。